package com.llt.chatroom.component;


import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import java.util.concurrent.ConcurrentHashMap;

// 记录当前用户在线状态（处理userid和websocket之间的映射）
@Slf4j
@Component
public class OnlineUserManager {
    // 考虑到线程问题使用 ConcurrentHashMap
    private ConcurrentHashMap<Integer, WebSocketSession> sessions = new ConcurrentHashMap<>();

    // 1. 用户上线, 给表插入键值对
    public void online(int userId, WebSocketSession session) {
        // 避免多开
        if (sessions.get(userId) != null) {
            // 证明已经登录了
            log.error("用户已经登录, 登录失败");
            return;
        }
        sessions.put(userId, session);
        log.info("用户上线: " + userId);
    }

    // 2. 用户下线, 删除用户
    public void offline(int userId, WebSocketSession session) {
        WebSocketSession exitSession = sessions.get(userId);
        if (exitSession == session) {
            // 是同一个就下线
            sessions.remove(userId);
            log.info("下线成功： " + userId);
        }
    }


    // 3. 根据 userid 获取 WebSocketSession
    public WebSocketSession getSession(int userId) {
        return sessions.get(userId);
    }

}
